/*
 * Copyright 2011 Clean GWT
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.cleangwt.showcase.server.bo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cleangwt.showcase.server.dao.UserDAO;
import com.cleangwt.showcase.server.entity.User;
import com.cleangwt.web.shared.PagedCriteria;
import com.cleangwt.web.shared.PagedResult;

/**
 * Provides methods to retrieve and update {@link User} entity.
 * 
 * @author Jess
 * @version 1.0
 * @since 1.0
 */
@Controller
@RequestMapping("user")
public class UserBO {
  @Autowired
  private UserDAO userDao;

  @RequestMapping("delete")
  @ResponseBody
  public void delete(@RequestBody User entity) {
    userDao.delete(entity);
  }

  @RequestMapping("list")
  @ResponseBody
  public PagedResult list(@RequestBody PagedCriteria pc) {
    List<?> list =
        userDao.list((String) pc.getParameter("id"), pc.getSortedColumns(), pc.getSortedDirections(),
            pc.getPageStart(), pc.getPageSize());
    return new PagedResult(list, userDao.count((String) pc.getParameter("id")));
  }

  /**
   * @param id
   * @return
   */
  @RequestMapping("read")
  @ResponseBody
  public User read(@RequestBody String id) {
    return userDao.read(id);
  }

  /**
   * @param entity
   */
  @RequestMapping("save")
  @ResponseBody
  public void save(@RequestBody User entity) {
    userDao.save(entity);
  }

}
